package main

import "fmt"

func main() {
	a := 0
	for i := 0; i < 10; i++ {
		test4(a)
	}

	//将函数类型赋值给f
	f := test5
	fmt.Printf("%T\n", f)

	//函数调用,将函数的返回值给f
	g := test5()
	fmt.Printf("%T\n", g)

	for j := 0; j < 10; j++ {
		fmt.Println(g())
	}

	var b int = 0
	a1 := func() int {
		b++
		return b
	}
	fmt.Println(a1())


}

//函数在调用结束会从内存中销毁局部变量
func test4(a int) {
	a++
	fmt.Println(a)
}

//通过匿名函数和闭包，实现函数在栈区的本地化操作
func test5() func() int {
	var a int

	return func() int {
		a++
		return a
	}
}
